﻿<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script language="javascript" type="text/javascript" src="/Js/load.js?v=050E3FBC"></script>
    <title>二进制数据序列化 - C# 高性能自动化服务端框架 - 凹凸架构</title>
        <style type="text/css">
        a{text-decoration: none;}
        a:hover{text-decoration: underline;}
    </style>
</head>
<body>
    <p>AutoCSer 的二进制数据序列化是一种通用的高性能数据序列化组件，支持若干<a href="/Config/Index.html?v=50E3FBC">全局默认配置</a>，支持 31 种常用数据类型组合的随机对象 <a href="/Serialize/Performance.html?v=50E3FBC">单线程 200W+/s 数据序列化</a> 操作，需要引用 <a href="/Index.html?v=50E3FBC" title="Go to the home page to download">AutoCSer</a>\Packet\*\AutoCSer.dll。</p>
    <p>
        . 默认支持循环引用，由于循环引用支持需要消耗一定的资源，对于确定不会产生循环引用的数据类型可以手动配置禁用支持（此配置只对数据根节点有效）。
        <br />循环引用支持也不是一定会降低序列化性能，比如某个大对象被多次引用（非循环引用），如果禁用循环引用支持那么对象将被多次序列化，反序列化以后也不再是同一个对象引用。
        <div>循环引用支持 参考示例 <a href="/Index.html?v=50E3FBC" title="Go to the home page to download">AutoCSer</a>\Example\<a id="GetCode0" href="javascript:AutoCSer.Web.Include.GetCode.Get('Example','0');">BinarySerialize\Reference.cs</a></div>
        <div>禁用循环引用 参考示例 <a href="/Index.html?v=50E3FBC" title="Go to the home page to download">AutoCSer</a>\Example\<a id="GetCode1" href="javascript:AutoCSer.Web.Include.GetCode.Get('Example','1');">BinarySerialize\DisabledReference.cs</a></div>
    </p>
    <p>
        . 支持成员选择配置，默认选择所有可见的非匿名字段成员。由于 AutoCSer 在整体结构规划中，字段用于描述数据，属性用于描述计算行为，所以在二进制序列化中默认不支持属性。
        <div>仅选择公共字段成员 参考示例 <a href="/Index.html?v=50E3FBC" title="Go to the home page to download">AutoCSer</a>\Example\<a id="GetCode2" href="javascript:AutoCSer.Web.Include.GetCode.Get('Example','2');">BinarySerialize\PublicInstanceField.cs</a></div>
        <div>支持匿名类型序列化 参考示例 <a href="/Index.html?v=50E3FBC" title="Go to the home page to download">AutoCSer</a>\Example\<a id="GetCodeb" href="javascript:AutoCSer.Web.Include.GetCode.Get('Example','b');">BinarySerialize\AnonymousType.cs</a></div>
        <div>匿名字段绑定属性支持 参考示例 <a href="/Index.html?v=50E3FBC" title="Go to the home page to download">AutoCSer</a>\Example\<a id="GetCode3" href="javascript:AutoCSer.Web.Include.GetCode.Get('Example','3');">BinarySerialize\Property.cs</a></div>
        <div>忽略成员 参考示例 <a href="/Index.html?v=50E3FBC" title="Go to the home page to download">AutoCSer</a>\Example\<a id="GetCode4" href="javascript:AutoCSer.Web.Include.GetCode.Get('Example','4');">BinarySerialize\IgnoreMember.cs</a></div>
    </p>
    <p>
        . 除了成员选择配置，还默认支持临时性的成员位图选择序列化成员。由于成员位图选择支持需要消耗一定的资源，可以手动配置禁用临时性的成员选择。
        <br />成员位图选择仅对数据根节点有效，如果需要在子节点中支持成员位图选择，需要自定义成员位图数据对象。
        <div>成员位图选择 参考示例 <a href="/Index.html?v=50E3FBC" title="Go to the home page to download">AutoCSer</a>\Example\<a id="GetCode5" href="javascript:AutoCSer.Web.Include.GetCode.Get('Example','5');">BinarySerialize\MemberMap.cs</a></div>
        <div>禁用成员位图 参考示例 <a href="/Index.html?v=50E3FBC" title="Go to the home page to download">AutoCSer</a>\Example\<a id="GetCode6" href="javascript:AutoCSer.Web.Include.GetCode.Get('Example','6');">BinarySerialize\DisabledMemberMap.cs</a></div>
        <div>成员位图数据对象 参考示例 <a href="/Index.html?v=50E3FBC" title="Go to the home page to download">AutoCSer</a>\Example\<a id="GetCode7" href="javascript:AutoCSer.Web.Include.GetCode.Get('Example','7');">BinarySerialize\MemberMapValue.cs</a></div>
    </p>
    <p>
        . 为了方便数据类型的抽象重用，默认支持数据基类配置入侵数据派生类型，也就是该数据基类的所有派生类型的序列化处理都默认当成该数据基类处理。
        <div> 参考示例 <a href="/Index.html?v=50E3FBC" title="Go to the home page to download">AutoCSer</a>\Example\<a id="GetCode8" href="javascript:AutoCSer.Web.Include.GetCode.Get('Example','8');">BinarySerialize\BaseType.cs</a></div>
    </p>
    <p>
        . 由于安全问题，默认不支持抽象类型与接口类型的序列化操作，可配置支持转换为该对象的真实类型序列化。
        <div> 参考示例 <a href="/Index.html?v=50E3FBC" title="Go to the home page to download">AutoCSer</a>\Example\<a id="GetCodec" href="javascript:AutoCSer.Web.Include.GetCode.Get('Example','c');">BinarySerialize\RealType.cs</a></div>
    </p>
    <p>
        . 支持全局版本更新，用于反序列化兼容数据定义的变化。
        <div> 参考示例 <a href="/Index.html?v=50E3FBC" title="Go to the home page to download">AutoCSer</a>\Example\<a id="GetCoded" href="javascript:AutoCSer.Web.Include.GetCode.Get('Example','d');">BinarySerialize\GlobalVersion.cs</a></div>
    </p>
    <p>
        . 当全局版本更新无法解决数据定义更新的兼容问题时，可以选择支持 <a href="/Serialize/Json.html?v=50E3FBC">Json 序列化</a>扩展。
        <div> 参考示例 <a href="/Index.html?v=50E3FBC" title="Go to the home page to download">AutoCSer</a>\Example\<a id="GetCode9" href="javascript:AutoCSer.Web.Include.GetCode.Get('Example','9');">BinarySerialize\Json.cs</a></div>
    </p>
    <p>
        . 支持自定义序列化函数，对于引用类型必须是静态函数，对于值类型必须是成员函数，必须同时定义序列化与反序列化两个函数并自行保证序列化数据的可逆性。
        <div>引用类型 参考示例 <a href="/Index.html?v=50E3FBC" title="Go to the home page to download">AutoCSer</a>\Example\<a id="GetCodea" href="javascript:AutoCSer.Web.Include.GetCode.Get('Example','a');">BinarySerialize\CustomClass.cs</a></div>
        <div>值类型 参考示例 <a href="/Index.html?v=50E3FBC" title="Go to the home page to download">AutoCSer</a>\Example\<a id="GetCodee" href="javascript:AutoCSer.Web.Include.GetCode.Get('Example','e');">BinarySerialize\CustomStruct.cs</a></div>
    </p>
</body>
</html>